VSCodeでDockerコンテナのビルドエラーが発生するのを解消してみた

VSCodeでDockerコンテナのビルドエラーが発生するのを解消してみた

Clock Icon2024.04.18

はじめに

アノテーションの髙嶋です。

プログラムの開発環境として、私はVSCode + Dockerコンテナを使用しています。
日々問題なく使えていた開発環境が、ある日突然コンテナのビルドエラーが発生するようになり起動できなくなったので、その解決方法を記載しています。

実行環境

今回の事象が発生した環境は下記の通りです。

OS:Windows 10(22H2)
WSL:Ubuntu-20.04
Rancher Desktop:1.13.1
Docker:25.0.4-rd, build c4cd0a9
Docker Compose:v2.24.7

また、コンテナ環境の定義ファイルは下記構成になっています。

./
 ├ .devcontainer
 |  ├ devcontainer.json
 |  └ docker-compose.extend.yml
 ├ docker-compose.yml
 └ Dockerfile

エラー内容

VSCodeからDockerコンテナへ接続した際にビルドが実行されると、下記エラーが発生するようになりました。

ERROR [dev] resolve image config for docker.io/docker/dockerfile:1.4

VSCodeの拡張機能である"Dev Containers"のバージョンを"0.338.1"に更新するとエラーが発生するようになり、ひとつ前の"0.327.0"に戻すとビルドが成功するようになりました。使っていた定義ファイルは今まで問題なく使用できていたため、拡張機能の不具合でそのうち解消されるのでは?と思っていたのですが、拡張機能が数バージョン更新されても解消しないため、自環境の問題と思い調べ始めました。

解決方法

エラーの内容からdockerfile:1.4が必要なのかと思い、pullしてから再ビルドを実行したところ解消しました。

docker pull docker.io/docker/dockerfile:1.4

VSCode + Rancher Desktopの環境で使用していると、どうも使用するイメージを自動でpullしてくれないようで、それが原因と思われます。

追加情報

本エラーが該当バージョンの拡張機能を使用していると必ず起きるというわけではなく、devcontainer.jsonfeaturesの設定をしていると発生するようでした。
※GitやAWS CLIを設定していた

"0.338.1"を使用しているとコンテナビルド時のログが下記のように出力されていました。

[+] Building 177.7s (19/19) FINISHED
 => [dev internal] load build definition from Dockerfile-with-features
 => => transferring dockerfile: 3.17kB
 => [dev] resolve image config for docker.io/docker/dockerfile:1.4

"0.327.0"の時のログも確認してみましたが、dockerfile:1.4という値は出力されていませんでした。なので、拡張機能のバージョンアップによってfeaturesを設定している場合のビルドの挙動が何か変わったのかな?と思います。
※リリースノートとかも探してみたのですが、該当しそうな情報は見つけられませんでした。。("ここに載ってる"をご存じの方、教えてください)

まとめ

今回は自分の開発環境で起きたエラーを解消してみました。
「今まで使えていたからこっちの問題ではない」ではなく、外部要因によって環境は日々変化していくので、ログをきちんと確認して対応するのは大事だと改めて思いました。

アノテーション株式会社について

アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.